/**
 * 本地存储工具（带过期时间）
 */
const StorageUtil = {
  /**
   * 存储数据（带过期时间）
   * @param {string} key - 存储键名
   * @param {any} data - 存储数据
   * @param {number} expireSeconds - 过期时间（单位：秒），0 表示永久有效
   */
  setItem: function (key, data, expireSeconds = 0) {
    // 构建存储结构：包含原始数据 + 过期时间戳
    const storageData = {
      data: data, // 原始数据
      expireTime: expireSeconds > 0 ?
        Date.now() + expireSeconds * 1000 // 过期时间戳（毫秒）
        :
        0 // 0 表示永久
    };
    // 存入本地存储（需转为 JSON 字符串）
    my.setStorageSync({
      key: key,
      data: JSON.stringify(storageData)
    });
  },

  /**
   * 读取数据（自动校验过期）
   * @param {string} key - 存储键名
   * @returns {any|null} 未过期则返回原始数据，过期/不存在则返回 null
   */
  getItem: function (key) {
    try {
      // 读取存储的 JSON 字符串
      const {
        data: storageStr
      } = my.getStorageSync({
        key: key
      });
      if (!storageStr) return null;

      // 解析为对象
      const storageData = JSON.parse(storageStr);
      const {
        data,
        expireTime
      } = storageData;

      // 校验过期：expireTime 为 0 表示永久；否则判断当前时间是否超过过期时间
      if (expireTime === 0 || Date.now() < expireTime) {
        return data; // 未过期，返回原始数据
      } else {
        // 已过期，删除无效数据
        this.removeItem(key);
        return null;
      }
    } catch (err) {
      console.error('读取存储失败：', err);
      return null;
    }
  },

  /**
   * 删除指定键的存储
   * @param {string} key - 存储键名
   */
  removeItem: function (key) {
    my.removeStorageSync({
      key: key
    });
  },

  /**
   * 清空所有本地存储（谨慎使用）
   */
  clear: function () {
    my.clearStorageSync();
  }
};

// 导出工具
module.exports = StorageUtil;